package com.erli.exchange.core.util;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import com.google.common.net.InetAddresses;

import cn.hutool.extra.servlet.ServletUtil;

/**
 * 
 * @Package com.erli.exchange.core.util   
 * @ClassName:  RequestUtil   
 * @Description:TODO
 * @Author: LeeHo
 * @Date:   2019年3月16日 下午10:43:49   
 *
 */
public class RequestUtil {

	/**
	 * 
	 * @Title: httpServletRequest   
	 * @Description: 获取当前Request对象
	 * @Author: LeeHo
	 * @Date:   2019年3月16日 下午11:15:07      
	 * @param: @return      
	 * @return: HttpServletRequest  
	 * @throws
	 */
	public static HttpServletRequest httpServletRequest() {
		return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
	}

	/**
	 * 
	 * @Title: getHttpHeaderValue   
	 * @Description: 获取Header信息中的值
	 * @Author: LeeHo
	 * @Date:   2019年3月16日 下午11:15:23      
	 * @param: @param key
	 * @param: @return      
	 * @return: String  
	 * @throws
	 */
	public static String getHttpHeaderValue(String key) {
		HttpServletRequest request = httpServletRequest();
		String value = request.getHeader(key);
		return value;
	}

	/**
	 * 
	 * @Title: isHttps   
	 * @Description: 判断当前请求是否为HTTPS
	 * @Author: LeeHo
	 * @Date:   2019年3月16日 下午11:15:49      
	 * @param: @return      
	 * @return: boolean  
	 * @throws
	 */
	public static boolean isHttps() {
		return httpServletRequest().getScheme().equalsIgnoreCase("https");
	}

	/**
	 * 
	 * @Title: getServerDomain   
	 * @Description: TODO
	 * @Author: LeeHo
	 * @Date:   2019年3月16日 下午11:16:44      
	 * @param: @return      
	 * @return: String  
	 * @throws
	 */
	public static String getServerDomain() {
		try {
			String urlHost = httpServletRequest().getServerName().toLowerCase();
			String[] urlHostArray = urlHost.split("\\.");
			if ((urlHostArray.length < 3) || InetAddresses.isUriInetAddress(urlHost)) {
				return urlHost;
			}
			String urlHost2 = urlHost.substring(urlHost.indexOf(".") + 1);
			if ((urlHost2.startsWith("com.") || urlHost2.startsWith("net."))
					|| (urlHost2.startsWith("org.") || urlHost2.startsWith("gov."))) {
				return urlHost;
			}
			return urlHost2;
		} catch (Exception e) {
			return "";
		}
	}

	/**
	 * 
	 * @Title: getClientIp   
	 * @Description: 获取客户端IP
	 * @Author: LeeHo
	 * @Date:   2019年3月16日 下午11:23:18      
	 * @param: @return      
	 * @return: String  
	 * @throws
	 */
	public static String getClientIp() {
		return ServletUtil.getClientIP(httpServletRequest(), null);
	}

	/**
	 * 
	 * @Title: getRequestUri   
	 * @Description: 获取请求路径
	 * @Author: LeeHo
	 * @Date:   2019年3月16日 下午11:27:36      
	 * @param: @return      
	 * @return: String  
	 * @throws
	 */
	public static String getRequestUri() {
		return httpServletRequest().getRequestURI();
	}
}
